package game.data;

/**
 * 战斗分析数据
 */
class FightAnalysisData {
	/**
	 * 事件统计数据
	 */
	public var events:Map<String, Float> = [];

	public function new() {}

	/**
	 * 事件统计逻辑
	 * @param name 
	 * @param value 
	 */
	public function event(type:FightAnalysisType, value:Float = 1):Void {
		var current = events.exists(type) ? events.get(type) : 0;
		events.set(type, current + value);
	}

	/**
	 * 检测最大值统计
	 * @param type 
	 * @param value 
	 */
	public function max(type:FightAnalysisType, value:Float):Void {
		var current = events.exists(type) ? events.get(type) : 0;
		if (current < value) {
			events.set(type, value);
		}
	}

	public function getEventValue(type:FightAnalysisType):Float {
		return events.exists(type) ? events.get(type) : 0;
	}

	/**
	 * 获得战斗评分
	 * @return Float
	 */
	public function getScore():Float {
		var score1:Float = Math.min(1, this.getEventValue(MAX_ATTACK_DAMAGE) / (GameOption.HP_MAX * 0.5));
		return 1 + Math.round(15 * score1 * 10) / 10;
	}
}

/**
 * 战斗分析类型
 */
enum abstract FightAnalysisType(String) to String {
	/**
	 * 全部攻击次数
	 */
	var TOTAL_ATTACK_TIMES = "total_attack_times";

	/**
	 * 全部攻击伤害
	 */
	var TOTAL_ATTACK_DAMAGE = "total_attack_damage";

	/**
	 * 每段连段最大攻击次数
	 */
	var MAX_ATTACK_TIMES = "section_max_attack_times";

	/**
	 * 每段连段攻击最大攻击伤害
	 */
	var MAX_ATTACK_DAMAGE = "max_attack_damage";

	/**
	 * 总运行时间
	 */
	var RUN_TIME = "run_time";

	/**
	 * 总使用技能时间
	 */
	var ATTACK_TIME = "attack_time";

	/**
	 * 残影总使用次数
	 */
	var TOTAL_SHADOW_TIMES = "total_shadow_times";

	/**
	 * 总防御成功次数
	 */
	var TOTAL_DEFEND_SUCCESS_TIMES = "total_defend_success_times";

	/**
	 * 完美防御成功次数
	 */
	var PERFECT_DEFEND_SUCCESS_TIMES = "perfect_defend_success_times";

	/**
	 * 中断敌人空中起身次数，仅在敌人使用了快速起身后追击成功一次统计
	 */
	var INTERRUPT_ENEMY_AIR_UP_TIMES = "interrupt_enemy_air_up_times";

	/**
	 * 位移距离总计，仅在非伤害状态下进行统计位移距离
	 */
	var MOVE_DISTANCE = "move_distance";
}
